<?php
/**
 * --------------------------------------------------------------
 * kfzphp 引导文件
 * Author: zd <kfzphp@126.com>
 * Date: 2018-06-01
 * Project: kfzphp.com
 * --------------------------------------------------------------
 */

// 报错级别
if (APP_DEBUG) {
    // php开启与关闭错误提示
    @ini_set("display_errors", "On");
    error_reporting(E_ALL);
} else {
    @ini_set("display_errors", "Off");
    error_reporting(E_ALL & ~E_DEPRECATED & ~E_STRICT);
}

// 版本信息
define('KFZPHP_VERSION', '2.3');
// 类文件后缀
define('CLASS_EXT', '.class.php');

// 定义系统主目录常量
define('BACKEND_PATH', KFZPHP_ROOT . '/backend'); // 后台开发目录
define('RUNTIME_PATH', KFZPHP_ROOT . '/runtime'); // 运行时目录
define('STATIC_PATH', '/static'); // 素材目录
define('TEMPLATE_PATH', KFZPHP_ROOT . '/template'); // 模板目录
define('UPLOAD_PATH', KFZPHP_ROOT . '/upload'); // 上传目录

// 定义系统子目录常量
define('COMMON_PATH', BACKEND_PATH . '/common'); // 后台公共目录
define('CONFIG_PATH', BACKEND_PATH . '/config'); // 后台配置目录
define('FUNCTION_PATH', BACKEND_PATH . '/function'); // 函数库目录
define('LIBRARY_PATH', BACKEND_PATH . '/library'); // 业务类库目录
define('MODULE_PATH', BACKEND_PATH . '/module'); // 业务逻辑目录
define('MASTER_PATH', ADDS_PATH . '/master'); // 自主类库目录
define('VENDOR_PATH', ADDS_PATH . '/vendor'); // 第三方类库目录
define('CACHE_PATH', RUNTIME_PATH . '/cache'); // 缓存目录
define('COMPILE_PATH', RUNTIME_PATH . '/compile'); // 模板编译目录
define('DATA_PATH', RUNTIME_PATH . '/data'); // 系统文件目录
define('LOGS_PATH', RUNTIME_PATH . '/logs'); // 系统日志目录

// 定义自定义常量
define('BASE_URL', 'http://' . $_SERVER['HTTP_HOST']); // 当前URL域名
define('BASE_URI', $_SERVER['REQUEST_URI']); // 当前URL的路径地址
define('SITE_URL', BASE_URL . BASE_URI); // 当前访问完整URL地址
define('TIMESTAMP', $_SERVER['REQUEST_TIME']); // 当前的时间戳
define('REQUEST_METHOD', $_SERVER['REQUEST_METHOD']); // 当前的http请求方式
define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest'); // 是否是ajax请求
define('IS_PAJAX', array_key_exists('HTTP_X_PJAX', $_SERVER) && $_SERVER['HTTP_X_PJAX']); // 是否是pajax请求
define('IS_POST', (REQUEST_METHOD == 'POST') ? true : false); // 是否是post请求
define('IS_SUBMIT', (IS_AJAX && IS_POST) ? true : false); // ajax和post同时成立的情况下
define('IS_WECHAT', strpos($_SERVER['HTTP_USER_AGENT'], 'MicroMessenger') !== false); // 是否是微信端

// 加载基本配置文件
$_CFG = array_merge(include CORE_PATH . '/config/config.php', include CONFIG_PATH . '/config.php');
// 整合扩展配置文件
if (!empty($_CFG['APP_CONFIG'])) {
    // 循环加载配置文件
    foreach ($_CFG['APP_CONFIG'] as $config_name) {
        $config_path = CONFIG_PATH . '/' . $config_name . '.php';
        if (file_exists($config_path)) {
            $_CFG = array_merge($_CFG, include $config_path);
        }
    }
}

// 初始化设置
@ini_set('memory_limit', $_CFG['INIT_MEMORY']);
@ini_set("session.cache_expire", $_CFG['SESSION_EXPIRE']);
@ini_set("session.use_cookies", 1);
@ini_set("session.auto_start", 1);
@ini_set("arg_separator.output", "&amp;");
@ini_set("date.timezone", "Asia/Shanghai");
// session
session_set_cookie_params($_CFG['SESSION_EXPIRE']);
session_start();

// 循环加载框架函数文件
if (!empty($_CFG['INIT_FUNCTIONS'])) {
    foreach ($_CFG['INIT_FUNCTIONS'] as $func_name) {
        $function_path = CORE_PATH . '/function/' . $func_name . '.php';
        if (file_exists($function_path)) {
            require_once $function_path;
        }
    }
}
// 加载用户公共函数文件
$function_path = FUNCTION_PATH . '/function.php';
if (file_exists($function_path)) {
    require_once $function_path;
}

// 引入核心类
require_once CORE_PATH . '/app' . CLASS_EXT;
require_once CORE_PATH . '/dispatch' . CLASS_EXT;
// 创建应用对象
$dispatch = new Dispatch();
$dispatch->route(); // 路由解析
$dispatch->start(); // 自动加载
$dispatch->run(); // 运行应用
